import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class CollectionsTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Java");
        list.add("C++");
        list.add("Python");
        list.add("JavaScript");
        System.out.println(list); // [Java, C++, Python, JavaScript]

        // reverse：反转集合中元素的顺序
        Collections.reverse(list);
        System.out.println(list); // [JavaScript, Python, C++, Java]

        // sort：按自然顺序对集合中元素进行排序
        Collections.sort(list);
        System.out.println(list); // [C++, Java, JavaScript, Python]

        // shuffle：随机打乱集合中元素的顺序
        Collections.shuffle(list);
        System.out.println(list);

        // swap：交换集合中指定位置的元素
        System.out.println("before swap: " + list);
        Collections.swap(list, 0, 3);
        System.out.println("after swap: " + list);

        // frequency：获取指定元素在集合中出现的次数
        list.add("Java");
        System.out.println(Collections.frequency(list, "Java")); // 2

        // copy：将源集合中的所有元素复制到目标集合中，目标集合的大小必须大于等于源集合的大小，与initCapacity无关
        List<String> dest = Arrays.asList(new String[list.size()]); // 创建一个大小为list.size()的List
        System.out.println(dest); // [null, null, null, null, null]
        Collections.copy(dest, list);
        System.out.println(dest); // [Java, Python, C++, Java]

        // synchronizedList：创建一个线程安全的List
        List<String> synchronizedList = Collections.synchronizedList(list);

        // unmodifiableList：创建一个不可修改的List
        List<String> unmodifiableList = Collections.unmodifiableList(list);
        unmodifiableList.add("Go"); // Exception: UnsupportedOperationException

    }
}
